156. Golang簡略筆記(一)
睡睡念
科技始終來自於人類的惰性,
入坑暗黑後,前些日子終於打到了世界三,
要打世界王,每次都要去網站看,好麻煩。
所以,先爬蟲,然後再設個30分鐘倒數計時通知該打王了。
scrapy+Golang
正文
Github: d4countdowntimer
-
私有函數,開頭是小寫,只能在同一個檔案裏面使用,
公開函數,開頭要大寫,能給其他檔案使用 -
ioutil 已在bo 1.16棄用,改用 io
ioutil.ReadAll -> io.ReadAll
ioutil.ReadFile -> os.ReadFile
ioutil.ReadDir -> os.ReadDir
// others
ioutil.NopCloser -> io.NopCloser
ioutil.TempDir -> os.MkdirTemp
ioutil.TempFile -> os.CreateTemp
ioutil.WriteFile -> os.WriteFile
ref. for-go-ioutil-readall-ioutil-readfile-ioutil-readdir-deprecated
- 轉換unix time
location, err := time.LoadLocation("Asia/Taipei")
if err != nil {
panic(err)
}
unixtime, err := strconv.ParseInt(d4event["unixtime"], 10, 64)
if err != nil {
fmt.Println("轉換失敗:", err)
return
}
t := time.Unix(unixtime, 0)
fmt.Println(t.In(location))
ref. how-to-convert-unix-time-to-time-time-in-golang
-
import 後面加上 _
使用【import _"github.com/gorilla/mux" 】只是引用該package,僅僅是為了呼叫init()函數,所以無法通過package名稱,來呼叫package裏面的其他函數
re. Golang import 三種特殊形式:下劃線、點、別名 -
github.com/spf13/viper 設定檔解決方案
token :=viper.GetStringSlice("Line.Token") # 有資料
tokens :=viper.GetStringMapStringSlice("Line")
token := tokens["Token"] # 無資料(因為轉成小寫了)
token := tokens["token"] # 有資料
看github 就有人有討論到這個問題,但到現在還是無解,
有人建議改用go-yaml/yaml來做 config檔的讀取
- 時間處理
//現在時間
now := time.Now()
//時間格式
fmt.Println("now :" + now.Format("2006-01-02 15:04:05"))
//日期相加
t2 := now.Add(5 * time.Minute)
//日期相減
subMin := t2.Sub(now)
//日期相減的時間,以分鐘顯示
fmt.Println(subMin.Minutes())
//日期相減的時間,四捨五入顯示到分
fmt.Println(subMin.Round(time.Minute))
//日期相減的時間,四捨五入顯示到分,再以分鐘顯示轉int
fmt.Println(int(subMin.Round(time.Minute).Minutes()))
//日期相加
firstStopTime := t.Add(-35 * time.Minute)
//判斷now 是否在 firstStopTime之後
if now.After(firstStopTime) {}
//判斷now 是否在 firstStopTime之前
if now.Before(firstStopTime){}
//判斷now是否跟firstStopTime一樣
if now.Equal(firstStopTime){}
ref.
-Golang 日期時間比較 compare datetime
-Go 時間加減、計算方法耗、毫秒轉 Time
- switch用法
subMin := 132
//一般用法
switch subMin {
case 0, 2, 3, 1:
fmt.Println("LineNotify")
default:
fmt.Println("Error")
}
//不指定變數
switch {
case subMin%10 == 0, subMin%10 == 2:
fmt.Println("LineNotify")
default:
fmt.Println(subMin)
}
- cron 簡易用法
c := cron.New()
//* 每分鐘執行一次
c.AddFunc("* * * * *", func() {
if <condition> {
c.Stop()
}
})
c.Start()
ref.
- 跟煎魚學GO-Cron定時任務
- golang cron v3 定時任務